import pandas as pd
import os
from datetime import datetime


def check_rain_status(file_path):
    try:
        # 读取数据时指定编码格式
        df = pd.read_excel(file_path, skiprows=6, engine='openpyxl')
        df.columns = df.columns.str.strip()

        # 修正日期解析（日.月.年 -> 年-月-日）
        df['当地时间 西安'] = pd.to_datetime(
            df['当地时间 西安'],
            format='%d.%m.%Y %H:%M',
            errors='coerce'
        ).dt.tz_localize(None)

        # 增强降水量解析逻辑
        def parse_precipitation(x):
            if pd.isna(x):
                return 0
            x_str = str(x).strip()
            if "无降水" in x_str:
                return 0
            elif any(kw in x_str for kw in ["降水迹象", "零星小雨"]):
                return 0.2  # 气象学定义微量降水
            try:
                val = float(x_str.split()[0])
                return min(val, 50)  # 过滤异常极值
            except:
                return 0

        df['降水量'] = df['RRR'].apply(parse_precipitation)
        return df[['当地时间 西安', '降水量']].dropna()

    except Exception as e:
        print(f"文件解析错误: {str(e)}")
        return pd.DataFrame()


def daily_report(file_path):
    day_data = check_rain_status(file_path)
    if day_data.empty:
        print("无效数据文件或格式错误")
        return

    # 获取准确日期（兼容多时区数据）
    sample_date = day_data['当地时间 西安'].iloc[0].date()
    date_str = sample_date.strftime("%Y年%m月%d日")

    # 精确筛选条件（0.2 ≤ 降水量 < 10）
    rain_hours = day_data[day_data['降水量'].between(0.2, 10, inclusive='left')]

    print(f"[{date_str}] 气象分析报告".center(50, "="))
    print(f"有效观测时段: {len(day_data)} 个")
    print(f"符合'雨纷纷'条件时段: {len(rain_hours)} 个")
    print(f"最大小时降水量: {day_data['降水量'].max():.1f}mm")

    # 输出关键降水时段
    if not rain_hours.empty:
        print("\n主要降水时段：")
        for time, rain in rain_hours.values:
            print(f"- {time.strftime('%H:%M')} | 降水量: {rain:.1f}mm")
    else:
        print("\n全天无有效降水")
    print("=" * 50 + "\n")


# 安全路径处理
base_dir = r"C:\Users\zyx\Desktop"
files = [
    os.path.join(base_dir, "西安4月4号天气情况.xls"),
    os.path.join(base_dir, "西安4月5号天气情况.xls")
]
#

#
for f in files:
    if os.path.exists(f):
        daily_report(f)
    else:
        print(f"文件不存在: {f}")